{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Environment and RL Agent Controller for a Thermostat\n",
    "\n",
    "```\n",
    "Author: Matt Pettis\n",
    "Github: mpettis\n",
    "Twitter: @mtpettis\n",
    "Date: 2020-04-27\n",
    "```\n",
    "\n",
    "This is a toy example of a room with a heater.  When the heater is off, the temperature will decay to 0.0, and when it is on, it will rise to 1.0.  The decay and rise is not instantaneous, but has exponential decay behavior in time given by the following formula:\n",
    "\n",
    "    temperature[i + 1] = heater[i] + (temperature[i] - heater[i]) * exp(-1/tau)\n",
    "\n",
    "Where:\n",
    "\n",
    "    temperature[i] is the temperature at timestep i (between 0 and 1).\n",
    "    heater[i] is the applied heater, 0 when not applied, 1 when applied.\n",
    "    tau is the characteristic heat decay constant.\n",
    "\n",
    "So, when the heater is off, the temperature will decay towards 0, and when the heater is on, it will rise towards 1.  When the heater is toggled on/off, it will drift towards 1/0.\n",
    "\n",
    "Here is a sample plot of what the temperature response looks like when the heater is on for a while, then off for a while.  You will see the characteristic rise and decay of the temperature to the response."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import math\n",
    "\n",
    "## Compute the response for a given action and current temperature\n",
    "def respond(action, current_temp, tau):\n",
    "    return action + (current_temp - action) * math.exp(-1.0/tau)\n",
    "\n",
    "## Actions of a series of on, then off\n",
    "sAction = pd.Series(np.array([1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0]))\n",
    "sResponse = np.zeros(sAction.size)\n",
    "\n",
    "## Update the response with the response to the action\n",
    "for i in range(sAction.size):\n",
    "    ## Get last response\n",
    "    if i == 0:\n",
    "        last_response = 0\n",
    "    else:\n",
    "        last_response = sResponse[i - 1]\n",
    "    sResponse[i] = respond(sAction[i], last_response, 3.0)\n",
    "\n",
    "## Assemble and plot\n",
    "df = pd.DataFrame(list(zip(sAction, sResponse)), columns=['action', 'response'])\n",
    "df.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Goal and Reward\n",
    "The goal here is to make an agent that will take actions that will keep the temperature between 0.4 and 0.6.\n",
    "\n",
    "We make a reward function to reflect our goal.  When the temperature is between 0.4 and 0.6, we set the reward as 0.0.  When the temperature is outside of this band, we set the reward to be the negative distance the temperature is from its closest band.  So if the temperature is 0.1, then the reward is -(0.4 - 0.1) = -0.3, and if it is 0.8, then the reward is -(0.8 - 0.6) = -0.2.\n",
    "\n",
    "Let's chart the reward vs. temperature to show what is meant:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Reward vs. Temperature')"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAt8AAAEWCAYAAAC+BfslAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAr1ElEQVR4nO3debhkdX3v+/dHBu04NUMHobFFIzZxCoQW5RgjXtE2HiNoDGocWiMSYozRHPsIepJwk3jFSwwZzDGiVxGNijEE+jikH8ZojKiNoKCxA0EJNA20YEfFFhm+949aG6s3VXvX3r1rfr+ep56uWuu3av32rqq1vr3271O/VBWSJEmS+u9+w+6AJEmSNC0sviVJkqQBsfiWJEmSBsTiW5IkSRoQi29JkiRpQCy+JUmSpAGx+JakEZfkVUn+Zdj9kCTtOotvSVMtyXeS7EjywyQ3JTkzyYOG3a9hSbKq+V3M3CrJ7W2PnzbsPi5G83M8etj9kCSLb0mCX62qBwGHAocBJw+rI0l2H9a+AarqP6vqQTO3ZvEvtC37/DD718kgfmdJduv3PiRNB4tvSWpU1U3ARlpFOABJnpLkX5NsT/K1JEc1y5+R5Mq2ducn+Urb488nOba5f1KS/0jygyTfTPKCtnavSvKFJKcnuRU4Jck+STYk+X6SLwM/163PST6b5PWzln0tyQvTcnqSW5rnujLJ4xf7+0ly/yR/luQ/k9yc5G+TLGvWHZXkhiT/s9nf1iTHJnlukn9PcluSt7Y91ylJPpnk7Ob38tUkv9C2/oAk/5BkW5JvJ3lDh20/kuT7wKuSHJHki83rtDXJu5Ps2bT/XLPp15qr9y/uNJSn/ep48xeQ9yT5TJLbgWfM1SdJ6pXFtyQ1khwI/ApwTfN4JfBp4E+BvYE3A/+QZAVwKXBwkn2T7AE8ETggyYObgnQNMHOV+D+ApwEPBf5v4CNJ9m/b9ZOBa4H9gLcDfwP8GNgf+M3m1s3HgJe2/QyPBR7R9PvZwC8Dj2n2fRxw64J/MT91avNchwKPBlYCf9i2/mHAA9qWvw94OXA4rZ//D5I8sq39McDf0/rdfhQ4N8keSe4H/B/ga81zPRN4Y5K1s7b9JLAc+DvgbuBNwL7Akc02rwOoql9utpm5gn92jz/vb9B6PR4M/GsPfZKkeVl8S1Kr6PsBcD1wC/BHzfKXA5+pqs9U1T1VdT6wCXhuVe0AvkKruD2cVlH2BeCpwFOAq6vqVoCq+vuqurF5jrOBq4Ej2vZ/Y1X9dVXdBfwE+DXgD6vq9qq6CvjQHH3/R+DQJI9oHr8MOKeq7gDupFU4HgKkqv6tqrYu5heUJMAJwJuq6raq+gHw/wAvaWt2J/D2qroT+DitQvgvq+oHVfUN4JvAL7S1v6yqPtm0/3NahftTgCcBK6rqj6vqJ1V1La1Cvn1fX6yqc5vf6Y6quqyqLq2qu6rqO8B7gacv5mdtc15VfaGq7gGe0EOfJGleQx1bKEkj4tiquiDJ02ldgd0X2E7rCvKvJ/nVtrZ7ABc39/8ZOAq4obn/PVoF3x3NYwCSvBL4feCgZtGDmn3MuL7t/gpax+b2Zdd163hV/SDJp2kVge+kdRX8tc26i5K8m9aV9EckOQd4c1V9v/uvoqsVwM8Al7Xq8NaPBrSPhb61qu5u7u9o/r25bf0OWj/7jHt/xqq6J8kNwAFA0forwva2trvx078k7LQtQJLH0Crg1zT93B24rMefrZv2fTyihz5J0ry88i1Jjar6Z+BM4M+aRdcDH66q5W23B1bVqc36meL7l5v7/0yr+H56c5/mivT7gNcD+1TVcuAqWoXrvbtuu78NuAt4eNuyVfN0/WPAS5McSevq8cx/Dqiqv6qqw4HH0hoysn6e5+rmu7SK58e1/S4e2hbKXIx7f8ZmqMmBwI20fu/fnvV7f3BVPbdt25r1XO8BvgUcXFUPAd7Kzr/j2W6nVaTP7P9hHdq076OXPknSvCy+JWlnfwE8qwn/fQT41SRrk+yW5AFNsPDApu2/AqtpDSH5cjO04hG0xnDPhPweSKuI2waQ5NVA19Bjc+X4HFrBy59pxnCvm6fPn2n2+8fA2c0wCZI8KcmTmzHpt9MaR37PAn4X7f26h9Z/Ik5P8rPN86/cxTHPhzfB0N2BN9L6i8GlwJeBHyR5S5Jlze/+8UmeNMdzPRj4PvDDJIcAvz1r/c3Ao9oefw14XJJDkzwAOGWevi6mT5J0HxbfktSmqrYBZ9Eac309rWDfW2kVz9fTunJ8v6bt7cBXgW9U1U+ap/gicF1V3dK0+Sbwrmb5zbTGDn9hnm68ntbwjJtoXYn/4Dx9voNWwX40rWEzMx5Cq2D+Hq2hK7cCpwEkeWuSz87Tj9neQiuMemnzLSMX0PrPx2KdB7y46d8rgBdW1Z3Nf0CeRyvY+W1aV93fTys02s2baQUkf0DrZ54dqjwF+FDzbSjHVdW/0/rPygW0xuDPOYnRIvskSfeRqtl/uZMkqb+SnAI8uqpePuy+SNIgeeVbkiRJGhCLb0mSJGlAHHYiSZIkDYhXviVJkqQBmapJdvbdd9866KCDht0NSZIkTbDLLrvsu1W1otO6qSq+DzroIDZt2jTsbkiSJGmCJek6M7HDTiRJkqQBsfiWJEmSBsTiW5IkSRoQi29JkiRpQCy+JUmSpAEZ6redJHkO8JfAbsD7q+rUWevvD5wFHA7cCry4qr7TrDsZeA1wN/CGqto4wK5LmlLnXr6F0zZu5sbtOzhg+TLWr13NsYet7Lp8MdsMa7l97X3fkrRYQ5vhMsluwL8DzwJuAL4CvLSqvtnW5nXAE6vqxCQvAV5QVS9O8ljgY8ARwAHABcBjquruufa5Zs2a8qsGJS3WuZdv4eRzrmTHnT891CzbYzd+7fCV/MNlW+6z/B0vfALAgrYZ1nL72vu+LcAlzSfJZVW1puO6IRbfRwKnVNXa5vHJAFX1jrY2G5s2X0yyO3ATsAI4qb1te7u59mnxLWlXPPXUi9iyfcd9lu+WcHeHY+nK5csAFrTNsJbb1973/YWT/q/7LJekdnMV38McdrISuL7t8Q3Ak7u1qaq7kvwXsE+z/NJZ23a8FJHkBOAEgFWrVi1JxyVNpxs7FHtAxyJtrvZzbTOs5fZ11/ctSb2Y+MBlVZ1RVWuqas2KFR1n+ZSknhzQXHGdbbeka/uFbjOs5fa1931L0q4YZvG9BXh42+MDm2Ud2zTDTh5KK3jZy7aStGjnXr6Fp556EY886dM89dSLOPfyLaxfu5ple+y2U7tle+zGS5/88I7L169dveBthrXcvva+707vDUnq1TCHnXwFODjJI2kVzi8BfmNWmw3AOuCLwIuAi6qqkmwAPprkz2kFLg8GvjywnkuaaLODlVu27+Dkc67kHS98Au944RM6fgPGmkfsPec3Yyxkm2Ett6/zLwc6vjcAg5iSejK0wCVAkucCf0HrqwY/UFVvT/LHwKaq2pDkAcCHgcOA24CXVNW1zbZvA34TuAt4Y1V9dr79GbiU1ItuwUrDdvK9IakXoxq4pKo+A3xm1rI/bLv/Y+DXu2z7duDtfe2gpKnULVRn2E6+NyTtqokPXErSQnUL1Rm2k+8NSbvK4lvSVFtIsHJmzK+m11zvDYOYknph8S1pas0EK7ds30Gxc3juHS98AiuXLyO0xvM6s6GgFars9N4AOr6XLMAlzTbUwOWgGbiU1M7wnJaK7yVJ7eYKXHrlW9LUMjynpeJ7SVKvLL4lTS3Dc1oqvpck9criW9JUMFipfprvvWQYU9IMi29JE89gpfqtWxDz2MNWdn3/WYBL08nApaSJZxhOw+T7T5o+Bi4lTTXDcBom33+S2ll8S5p4huE0TL7/JLWz+JY0UQxWatQ4K6akdhbfkiaGwUqNImfFlNTOwKWkiWGwTePE96s0uQxcSpoKBts0Tny/StPJ4lvSxDDYpnHi+1WaTkMpvpPsneT8JFc3/+7Vpd26ps3VSda1Lb8kyeYkVzS3nx1c7yUNW7eQmsFKjRODmNJ02n1I+z0JuLCqTk1yUvP4Le0NkuwN/BGwBijgsiQbqup7TZOXVZUDuKUpMxOq3HHn3cDOocqZAOVpGzdz4/YdHLB8GevXrjZYqZHU7f0KzPselzS+hhK4TLIZOKqqtibZH7ikqlbPavPSps1vNY/f27T7WJJLgDcvtPg2cCmNP0NqmnS+x6XxN4qBy/2qamtz/yZgvw5tVgLXtz2+oVk244PNkJM/SJJuO0pyQpJNSTZt27ZtlzsuabgMqWnS+R6XJlvfiu8kFyS5qsPtmPZ21br0vtDL7y+rqicAT2tur+jWsKrOqKo1VbVmxYoVC/45JI0WQ2qadL7HpcnWtzHfVXV0t3VJbk6yf9uwk1s6NNsCHNX2+EDgkua5tzT//iDJR4EjgLOWqOuSRsS5l2+5z3jY9WtX7zQeFgxVarLM9R7v9JlwHLg0XoY17GQDMPPtJeuA8zq02Qg8O8lezbehPBvYmGT3JPsCJNkDeB5w1QD6LGmAnK1S08oZMaXJNqzA5T7AJ4BVwHXAcVV1W5I1wIlVdXzT7jeBtzabvb2qPpjkgcDngD2A3YALgN+vqrtn72c2A5fS+DB0Ju3Mz4Q0PuYKXA7lqwar6lbgmR2WbwKOb3v8AeADs9rcDhze7z5KGi5DZ9LO/ExIk8EZLiWNJENn0s78TEiTweJb0tB1ms3P2SqlnTkjpjQZLL4lDZXBSqk3BjGlyTCUwOWwGLiURo8hMmnX+BmSRs8oznApSYAhMmlX+RmSxovFt6ShMkQm7Ro/Q9J4sfiWNDAGK6WlZxBTGi8W35IGwmCl1B8GMaXxYuBS0kAYCpMGy8+cNDwGLiUNnaEwabD8zEmjyeJb0kAYCpMGy8+cNJosviUtOYOV0vDN95kzjCkNh8W3pCVlsFIaDd2CmMcetrLr59QCXOo/A5eSlpQhL2n0+TmV+svApaSBMeQljT4/p9LwWHxLWlKGvKTR5+dUGp6hFN9J9k5yfpKrm3/36tLun5JsT/KpWcsfmeRLSa5JcnaSPQfTc0ntDFZK48lZMaXhGdaV75OAC6vqYODC5nEnpwGv6LD8ncDpVfVo4HvAa/rSS0ldGayUxpezYkrDM5TAZZLNwFFVtTXJ/sAlVdXxsliSo4A3V9XzmscBtgEPq6q7khwJnFJVa+fbr4FLaekY2JImj59raWmMYuByv6ra2ty/CdhvAdvuA2yvqruaxzcAXS+pJTkhyaYkm7Zt27a43kq6DwNb0uTxcy31X9+K7yQXJLmqw+2Y9nbVuvTet8vvVXVGVa2pqjUrVqzo126kqWNgS5o8fq6l/tu9X09cVUd3W5fk5iT7tw07uWUBT30rsDzJ7s3V7wMBB6NJfXTu5Vs4beNmbty+gwOWL2P92tWsX7uak8+5kh133n1vO4OV0nib63Pd6ThglkNauGENO9kArGvurwPO63XD5kr5xcCLFrO9pIUxWClND4OYUv8NK3C5D/AJYBVwHXBcVd2WZA1wYlUd37T7PHAI8CBaV7xfU1UbkzwK+DiwN3A58PKqumO+/Rq4lBbOAJYkjwPSwswVuOzbsJO5VNWtwDM7LN8EHN/2+Gldtr8WOKJvHZR0LwNYkjwOSEvHGS4lzckAliSPA9LSsfiWBHSerRLmnglP0nRwRkxp6Qxl2Imk0TITqpz5hoP2UOVMgNJvOZCmV7fjADDvsUPSzoYSuBwWA5dSZ4apJC2Gxw6ps1Gc4VLSCDFMJWkxPHZIC+ewE2nKdJoo44DlyzpevTJMJWkucx07nJRH6swr39IU6TZhzjMOWWGoUtKCdQtiPuOQFU7KI3Vh8S1NkdM2bt5p2miAHXfezcXf2uZslZIWrNuMmBd/a1vHY81pGzcPp6PSCHHYiTRF5hqfeexhKy22JS1Yp2PHm86+omNbx4JLXvmWpooTZUgaBI81UncW39KE6jTxhRPmSBoEJ+WRurP4liZQt2Al4NhuSX3XbSw4YBBTU89JdqQJ5MQXkkaRxyZNCyfZkaaME19IGkUemySLb2kiGXaSNIo8NklDKr6T7J3k/CRXN//u1aXdPyXZnuRTs5afmeTbSa5obocOpOPSCDJYKWlcGMSUhnfl+yTgwqo6GLiwedzJacAruqxbX1WHNrcr+tBHaeQZrJQ0TgxiSkMKXCbZDBxVVVuT7A9cUlUdL8klOQp4c1U9r23ZmcCnquqTC9mvgUtNGsNLkiaBxzJNmlEMXO5XVVub+zcB+y3iOd6e5OtJTk9y/26NkpyQZFOSTdu2bVtUZ6VRZXhJ0iTwWKZp0rfiO8kFSa7qcDumvV21Lr0v9PL7ycAhwJOAvYG3dGtYVWdU1ZqqWrNixYqF/hjSSDO8JGkSeCzTNNm9X09cVUd3W5fk5iT7tw07uWWBzz1z1fyOJB8E3rwLXZXGwrmXb+G0jZu5cfsODli+jPVrV7N+7WpOPudKdtx5973tDFZKGjfzHcs6Hf/MsGhcDWvYyQZgXXN/HXDeQjZuCnaSBDgWuGopOyeNGoOVkiZZtyDmsYet7Hr8M4ypcTWswOU+wCeAVcB1wHFVdVuSNcCJVXV80+7ztIaXPAi4FXhNVW1MchGwAghwRbPND+fbr4FLjSvDSJKmlcc/jaO5Apd9G3Yyl6q6FXhmh+WbgOPbHj+ty/Z+2jRVDCNJmlYe/zRpnOFSGgOGkSRNK49/mjQW39KIccZKSfopZ8XUpLH4lkaIwUpJ2pmzYmrSzBm4TPKLc21cVV9d8h71kYFLjTqDRZLUG4+XGmW7Erh8V/PvA4A1wNdofcPIE4FNwJFL1UlJBoskqVceLzWu5hx2UlXPqKpnAFuBX2xmijwcOAzw7zrSEjNYJEm98XipcdXrmO/VVXXlzIOqugr4+f50SZoOBislafEMYmpc9Vp8X5nk/UmOam7vA77ez45Jk8xgpSTtGoOYGlc9zXCZ5AHAbwO/3Cz6HPCeqvpxH/u25AxcalQYFJKk/vD4qlGwSzNcJtkN+Gwz9vv0pe6cNI0MCklSf3h81aibd9hJVd0N3JPkoQPojzQVDApJUn94fNWom/fKd+OHtMZ9nw/cPrOwqt7Ql15JE+Lcy7dw2sbN3Lh9BwcsX8b6tas59rCVrF+7mpPPuZIdd959b1uDlZK06+Y6vnY7JkuD1GvxfU5zk9SjmVDlzAmgPVQ5c7D3JCBJS6vb8RWY95gsDUJPgctJYeBSg2ToR5JGh8dkDdIuBS6bJzgYeAfwWFqzXQJQVY9akh5KE8jQjySNDo/JGhW9fs/3B4H3AHcBzwDOAj7Sr05Jk8DQjySNDo/JGhW9Ft/LqupCWsNUrquqU4D/vtidJtk7yflJrm7+3atDm0OTfDHJN5J8PcmL29Y9MsmXklyT5Owkey62L9JScLZKSRptzoipUdFr8X1HkvsBVyd5fZIXAA/ahf2eBFxYVQcDFzaPZ/sR8MqqehzwHOAvkixv1r0TOL2qHg18D3jNLvRF2iXOVilJo88ZMTUqep3h8knAvwHLgT8BHgKcVlWXLmqnyWbgqKrammR/4JKqmvNyYJKvAS8CrgG2AQ+rqruSHAmcUlVr59uvgUv1gyEeSRpfHsPVD7scuARuq6of0vq+71cvQZ/2q6qtzf2bgP3mapzkCGBP4D+AfYDtVXVXs/oGoOulxCQnACcArFq1ahe7Ld2XIR5JGl8ewzVovRbfH0hyIPAV4PPA56rqyrk2SHIB8LAOq97W/qCqKknXy+/NlfEPA+uq6p4kPXb53uc/AzgDWle+F7Sx1IMDli/reNXEEI8kjT6P4Rq0norvqnp6E2p8EnAU8OkkD6qqvefY5uhu65LcnGT/tmEnt3Rp9xDg08Db2oa43AosT7J7c/X7QMCBWRqITrOjOVulJI0vZ8TUoPUUuEzyS8D/oHXV+r8DnwJ+Zxf2uwFY19xfB5zXYZ97Av8InFVVn5xZXq1B6hfTGv/ddXtpqRmslKTJYxBTg9Zr4PIu4DJaE+18pqp+sks7TfYBPgGsAq4Djquq25KsAU6squOTvJzW94t/o23TV1XVFUkeBXwc2Bu4HHh5Vd0x334NXGpXGMqRpOnhMV+7YikCl/sCTwV+GXhDknuAL1bVHyymQ1V1K/DMDss3Acc39z9Cl4l8qupa4IjF7FtaLEM5kjQ9POarX3oadlJV24FrgW8DW4Gfo1WIS1PD2dEkaXp4zFe/9HTlO8m1wLeAf6E1zfyrd3XoiTTKDFZK0nQziKl+6XXM9/2q6p4B9KevHPOtXswEK2cfcGcCOB5wJWk6dCqyga7nCM8HmjHXmO9ei+/H0LrivV9VPT7JE4HnV9WfLm1X+8viW70wZCNJ6sZzhHoxV/Hd05hv4H3AycCdAFX1deAlS9M9abQYspEkdeM5Qruq1+L7Z6rqy7OW3dWxpTTmDNlIkrrxHKFd1Wvx/d0kPwcUQJIX0frWE2msnXv5Fp566kU88qRP89RTL+Lcy7ewfu1qlu2x207tDFZKkoB5zxGdzitSu16L798B3gsckmQL8EbgxH51ShoEZ6yUJC1Utxkxjz1sZdfzigW42vUUuLy3cfJAWgX7j4CXVNXf9atj/WDgUu0MzUiSlpLnFc1YdOAyyUOSnJzk3UmeRavoXgdcAxy39F2VBsfQjCRpKXleUS/mG3byYWA1cCXwWuBi4NeBF1TVMX3um9RXhmYkSUvJ84p6Md8Ml4+qqicAJHk/rZDlqqr6cd97Ji0hZ6yUJPWbs2KqF/Nd+b5z5k5V3Q3cYOGtcWOwUpI0CN3CmIBBTN1rzsBlkruB22ceAstojfsOUFX1kL73cAkZuJxOBmAkScPkeWj6zBW4nHPYSVXtNtd6aRwYgJEkDZPnIbXr9Xu+pbFlAEaSNEyeh9RuKMV3kr2TnJ/k6ubfvTq0OTTJF5N8I8nXk7y4bd2ZSb6d5IrmduhAfwCNpG6zijljpSRpmOY6Dzkj5vSZ79tO+uUk4MKqOjXJSc3jt8xq8yPglVV1dZIDgMuSbKyq7c369VX1ycF1WaNsJlQ5kzBvD1XOBChNmUuShqHbeQiY99ylybOgGS6XbKfJZuCoqtqaZH/gkqqa8zJkkq8BL2qK8TOBTy20+DZwObkMs0iSxo3nrsm16Bku+2i/qtra3L8J2G+uxkmOAPYE/qNt8dub4SinJ7n/HNuekGRTkk3btm3b5Y5rNBlmkSSNG89d06lvxXeSC5Jc1eG208yY1br03vXye3Nl/MPAq6vqnmbxycAhwJOAvbnvkJX25z+jqtZU1ZoVK1bs6o+lEWWYRZI0bjx3Tae+jfmuqqO7rUtyc5L924ad3NKl3UOATwNvq6pL25575qr5HUk+CLx5CbuuEedslZKkSeCMmNNpWMNONgDrmvvrgPNmN0iyJ/CPwFmzx3Y3BTtJAhwLXNXPzmp0OFulJGlSOCPmdBpW4HIf4BPAKuA64Liqui3JGuDEqjo+ycuBDwLfaNv0VVV1RZKLgBW0Ztq8otnmh/Pt18Dl+DOcIkmadJ7rxt+iZ7jsl6q6FXhmh+WbgOOb+x8BPtJle995U8pwiiRp0nmum2zOcKmxYjhFkjTpPNdNNotvjaxOs345W6UkadI5I+Zks/jWSDJYKUmaVgYxJ9tQApfDYuByfBg2kSRpZ54bx8coznApzcmwiSRJO/PcOBksvjWSDJtIkrQzz42TweJbQ2ewUpKk+RnEnAwW3xoqg5WSJPXGIOZkMHCpoTI8IknSrvFcOnoMXGpkGR6RJGnXeC4dLxbfGirDI5Ik7RrPpePF4lsDY7BSkqSlN9+51DDmaLH41kAYrJQkqT+6BTGPPWxl1/OvBfjwGLjUQBgGkSRp8Dz/DoeBSw2dYRBJkgbP8+/o2X1YO06yN3A2cBDwHeC4qvrerDaPAP6R1n8S9gD+uqr+tll3OHAmsAz4DPB7NU2X8UfYuZdv4bSNm7lx+w4OWL6M9WtXc8DyZR3/520YRJKk/pnr/NvpfO2wz/4b5pXvk4ALq+pg4MLm8WxbgSOr6lDgycBJSQ5o1r0HeC1wcHN7Tt97rHl1G1v2jENWGKyUJGnAuoUxn3HICseCD8kwi+9jgA819z8EHDu7QVX9pKruaB7en6a/SfYHHlJVlzZXu8/qtL0G77SNm9lx5907Ldtx591c/K1tBislSRqwbmHMi7+1reP5+rSNm4fT0SkytGEnwH5VtbW5fxOwX6dGSR4OfBp4NLC+qm5Msga4oa3ZDUDHKi7JCcAJAKtWrVqirqubucaWHXvYSottSZIGrNP5901nX9GxrWPB+6+vV76TXJDkqg63Y9rbNVevO47Xrqrrq+qJtIrvdUk6FundVNUZVbWmqtasWLFi0T+LeuMX/UuSNPo8Xw9PX698V9XR3dYluTnJ/lW1tRlGcss8z3VjkquApwFfAA5sW30g4CClAesU1Fi/djUnn3PlTn/Kcmy3JEmjZa7ztUHM/hrmmO8NwLrm/jrgvNkNkhyYZFlzfy/gl4DNzXCV7yd5SpIAr+y0vfrHSXMkSRpf3caCAwYx+2xok+wk2Qf4BLAKuI7WVw3e1oznPrGqjk/yLOBdtIakBHh3VZ3RbL+Gn37V4GeB353vqwadZGfp+KX9kiRNHs/vS2OuSXaGFrisqluBZ3ZYvgk4vrl/PvDELttvAh7fzz6qO7+0X5KkyeP5vf+c4VKLYlBDkqTJ4/m9/yy+NadzL9/CU0+9iEee9GmeeupF94756val/QYrJUkaX3Od37vVBFqYYX7Pt0bcTKhyJgndHqqcCVCahpYkaXJ0O78D89YE6s3QApfDYOByYQxdSJIksCZYqLkClw47UVeGLiRJElgTLCWLb3Vl6EKSJIE1wVKy+BbQOVhpqFKSJIFBzKVk8S1nq5QkSXNyRsylY+BShigkSdKiWEN0ZuBSczJEIUmSFsMaYuEsvmWIQpIkLYo1xMJZfE8Zg5WSJGmpGMRcOIvvKWKwUpIkLSWDmAtn4HKKGIqQJEmDMO01h4FLAYYiJEnSYFhzdGfxPUUMRUiSpEGw5uhuKMV3kr2TnJ/k6ubfvTq0eUSSrya5Isk3kpzYtu6SJJubdVck+dnB/gSjz2ClJEkaFoOY3Q3ryvdJwIVVdTBwYfN4tq3AkVV1KPBk4KQkB7Stf1lVHdrcbul7j8eIwUpJkjRMBjG7G0rgMslm4Kiq2ppkf+CSqup6+TXJPsDlwFOq6sYklwBvrqoFpSenJXA57SEHSZI0mqalRhnFwOV+VbW1uX8TsF+nRkkenuTrwPXAO6vqxrbVH2yGnPxBknTbUZITkmxKsmnbtm1L9gOMMkMOkiRpFFmj9LH4TnJBkqs63I5pb1etS+8dL79X1fVV9UTg0cC6JDNF+suq6gnA05rbK7r1o6rOqKo1VbVmxYoVS/KzjTpDDpIkaRRZo8Du/Xriqjq627okNyfZv23YyZxjtpuhJlfRKrQ/WVVbmuU/SPJR4AjgrCXs/tg49/ItnLZxMzdu38EBy5exfu1q1q9dzcnnXMmOO+++t53BSkmSNGzz1Sid6ppJy6YNa9jJBmBdc38dcN7sBkkOTLKsub8X8EvA5iS7J9m3Wb4H8DzgqoH0esQYrJQkSeOkWxDz2MNWdq1rJi2MOazA5T7AJ4BVwHXAcVV1W5I1wIlVdXySZwHvojUkJcC7q+qMJA8EPgfsAewGXAD8flXd3Wlf7SYtcDktoQVJkjT5JqmumStw2bdhJ3OpqluBZ3ZYvgk4vrl/PvDEDm1uBw7vdx/HgaEFSZI0KaalrnGGyzFmaEGSJE2KaalrLL7HhDNWSpKkSTYts2JafI8Bg5WSJGnSTcusmEMJXA7LuAYuJymAIEmStBDjWAeN4gyXWoBpCSBIkiTNNml1kMX3GJiWAIIkSdJsk1YHWXyPGIOVkiRJPzVpQUyL7xFisFKSJGlnkxbENHA5QsYxUCBJkjQMo1w3GbgcE5MWKJAkSeqXca2bLL5HyKQFCiRJkvplXOsmi+8h6BYOMFgpSZLUm3ENYu4+7A5Mm5lQ5Y477wZ2DlXOBChP27iZG7fv4IDly1i/drXBSkmSpFm61U3AvLXWMBm4HLBRDgdIkiSNu1GotQxcjpBxDQdIkiSNg1GvtSy+B2xcwwGSJEnjYNRrraEV30n2TnJ+kqubf/eao+1DktyQ5N1tyw5PcmWSa5L8VZIMpue9c7ZKSZKkwRr1WmuYV75PAi6sqoOBC5vH3fwJ8LlZy94DvBY4uLk9px+dXCxnq5QkSRq8bjNijkqtNbTAZZLNwFFVtTXJ/sAlVXWf/5IkORxYD/wTsKaqXt+0v7iqDmnavLR5rt+aa5+DDFyOwmB/SZIkDd6oBi73q6qtzf2bgP1mN0hyP+BdwJtnrVoJ3ND2+IZm2X0kOSHJpiSbtm3btuu97tGoD/aXJEnS4PX1e76TXAA8rMOqt7U/qKpK0ukS/OuAz1TVDYsd0l1VZwBnQOvK96KeZBEOWL6s45XvURnsL0mSpMHra/FdVUd3W5fk5iT7tw07uaVDsyOBpyV5HfAgYM8kPwT+Ejiwrd2BwOhMXURrsH/7F7zDaA32lyRJ0uANc9jJBmBdc38dcN7sBlX1sqpaVVUH0Rp6clZVndQMV/l+kqc033Lyyk7bD9OoD/aXJEnS4A1zevlTgU8keQ1wHXAcQJI1wIlVdfw8278OOBNYBny2uY2UYw9babEtSZKkezm9vCRJkrSERvXbTiRJkqSpYvEtSZIkDYjFtyRJkjQgFt+SJEnSgExV4DLJNlrfrDJo+wLfHcJ+NXi+1tPD13p6+FpPD1/r6dHv1/oRVbWi04qpKr6HJcmmbolXTRZf6+nhaz09fK2nh6/19Bjma+2wE0mSJGlALL4lSZKkAbH4Howzht0BDYyv9fTwtZ4evtbTw9d6egzttXbMtyRJkjQgXvmWJEmSBsTiW5IkSRoQi+8llOQ5STYnuSbJSR3W3z/J2c36LyU5aAjd1BLo4bX+/STfTPL1JBcmecQw+qldN99r3dbu15JUEr+mbEz18lonOa75bH8jyUcH3UctjR6O4auSXJzk8uY4/txh9FO7JskHktyS5Kou65Pkr5r3wdeT/OIg+mXxvUSS7Ab8DfArwGOBlyZ57KxmrwG+V1WPBk4H3jnYXmop9PhaXw6sqaonAp8E/t/B9lJLocfXmiQPBn4P+NJge6il0strneRg4GTgqVX1OOCNg+6ndl2Pn+v/BXyiqg4DXgL878H2UkvkTOA5c6z/FeDg5nYC8J4B9MniewkdAVxTVddW1U+AjwPHzGpzDPCh5v4ngWcmyQD7qKUx72tdVRdX1Y+ah5cCBw64j1oavXyuAf6E1n+mfzzIzmlJ9fJavxb4m6r6HkBV3TLgPmpp9PJaF/CQ5v5DgRsH2D8tkar6HHDbHE2OAc6qlkuB5Un273e/LL6Xzkrg+rbHNzTLOrapqruA/wL2GUjvtJR6ea3bvQb4bF97pH6Z97Vu/kz58Kr69CA7piXXy+f6McBjknwhyaVJ5rqiptHVy2t9CvDyJDcAnwF+dzBd04At9Hy+JHbv9w6kaZbk5cAa4OnD7ouWXpL7AX8OvGrIXdFg7E7rz9NH0fpr1ueSPKGqtg+zU+qLlwJnVtW7khwJfDjJ46vqnmF3TOPPK99LZwvw8LbHBzbLOrZJsjutP2XdOpDeaSn18lqT5GjgbcDzq+qOAfVNS2u+1/rBwOOBS5J8B3gKsMHQ5Vjq5XN9A7Chqu6sqm8D/06rGNd46eW1fg3wCYCq+iLwAGDfgfROg9TT+XypWXwvna8AByd5ZJI9aQU0NsxqswFY19x/EXBROcvROJr3tU5yGPBeWoW340LH15yvdVX9V1XtW1UHVdVBtMb3P7+qNg2nu9oFvRzDz6V11Zsk+9IahnLtAPuopdHLa/2fwDMBkvw8reJ720B7qUHYALyy+daTpwD/VVVb+71Th50skaq6K8nrgY3AbsAHquobSf4Y2FRVG4D/j9afrq6hFQB4yfB6rMXq8bU+DXgQ8PdNpvY/q+r5Q+u0FqXH11oToMfXeiPw7CTfBO4G1leVf70cMz2+1v8DeF+SN9EKX77Ki2XjJ8nHaP2Hed9m/P4fAXsAVNXf0hrP/1zgGuBHwKsH0i/fS5IkSdJgOOxEkiRJGhCLb0mSJGlALL4lSZKkAbH4liRJkgbE4luSJEkaEL9qUJJGXJJ9gAubhw+j9TV3M985fERV/WQoHesgyVHAT6rqX4fcFUkaSRbfkjTimu+SPhQgySnAD6vqz4bVnyS7V9VdXVYfBfwQ6Ln4nuf5JGmiOOxEksZQksOT/HOSy5JsTLJ/s/ySJKcn2ZTk35I8Kck5Sa5O8qdNm4OSfCvJ3zVtPpnkZ3p43r9Isgn4vSS/muRLSS5PckGS/ZIcBJwIvCnJFUmeluTMJC9q6/cPm3+PSvL5JBuAbybZLclpSb6S5OtJfmugv1BJGhCLb0kaPwH+GnhRVR0OfAB4e9v6n1TVGuBvgfOA3wEeD7yqGcICsBr431X188D3gdcl2WOe592zqtZU1buAfwGeUlWHAR8H/mdVfafZ5+lVdWhVfX6en+MXgd+rqscAr6E1tfOTgCcBr03yyIX/aiRptDnsRJLGz/1pFdPnJ4HWFNlb29bPTHt/JfCNqtoKkORa4OHAduD6qvpC0+4jwBuAf5rnec9uu38gcHZzZXxP4NuL+Dm+XFUz2z0beGLbVfKHAgcv8nklaWRZfEvS+AmtovrILuvvaP69p+3+zOOZ437N2qZ6eN7b2+7/NfDnVbWhCVme0mWbu2j+yprkfrQK9U7PF+B3q2pjl+eRpIngsBNJGj93ACuSHAmQZI8kj1vgc6ya2R74DVrDSDYv4HkfCmxp7q9rW/4D4MFtj78DHN7cfz6wR5fn2wj8djP0hSSPSfLA3n8cSRoPFt+SNH7uAV4EvDPJ14ArgP+2wOfYDPxOkn8D9gLe03xlYa/Pewrw90kuA77btvz/AC+YCVwC7wOe3jzfkex8tbvd+4FvAl9NchXwXvzrrKQJlKrZf3mUJE2y5ltJPlVVjx92XyRp2njlW5IkSRoQr3xLkiRJA+KVb0mSJGlALL4lSZKkAbH4liRJkgbE4luSJEkaEItvSZIkaUD+f9rr1xRThuWnAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 864x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def reward(temp):\n",
    "        delta = abs(temp - 0.5)\n",
    "        if delta < 0.1:\n",
    "            return 0.0\n",
    "        else:\n",
    "            return -delta + 0.1\n",
    "\n",
    "temps = [x * 0.01 for x in range(100)]\n",
    "rewards = [reward(x) for x in temps]\n",
    "\n",
    "fig=plt.figure(figsize=(12, 4))\n",
    "\n",
    "plt.scatter(temps, rewards)\n",
    "plt.xlabel('Temperature')\n",
    "plt.ylabel('Reward')\n",
    "plt.title('Reward vs. Temperature')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Environment Setup\n",
    "\n",
    "The environment responds to actions.  It is what keeps track of the temperature state of the room, returns the reward for being in that temperature state, and tells you if the episode is over or not (in this case, we just set a max episode length that can happen).\n",
    "\n",
    "Here is the gist of the flow:\n",
    "\n",
    "- Create an environment by calling `Environment.create()`, see below, telling it to use the class you created for this (here, the ThermostatEnvironment) and the max timesteps per episode.  The enviroment is assigned to the name `environment`.\n",
    "- Initialize the environment `environment` by calling `environment.reset()`.  This will do stuff, most importantly, it will initialize the `timestep` attribute to 0.\n",
    "- When you want to take an action on the current state of the environment, you will call `environment.execute(<action-value>)`.  If you want to have the heater off, you call `environment.execute(0)`, and if you want to have the heater on, you call `environment.execute(1)`.\n",
    "- What the `execute()` call returns is a tuple with 3 entries:\n",
    "    - __state__.  In this case, the state is the current temperature that results from taking the action.  If you turn on the heater, the temperature will rise from the previous state, and if the heater was turned off, the temperature will fall from the previous state.  This should be kept as a numpy array, even though it seems like overkill with a single value for the state coming back.  For more complex examples beyond this thermostat, there will be more than 1 component to the state.\n",
    "    - __terminal__.  This is a True/False value.  It is True if the episode terminated.  In this case, that will happen once you exceed the max number of steps you have set.  Otherwise, it will be False, which lets the agent know that it can take further steps.\n",
    "    - __reward__.  This is the reward for taking the action you took.\n",
    "\n",
    "Below, to train the agent, you will have the agent take actions on the environment, and the environment will return these signals so that the agent can self-train to optimize its reward."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "###-----------------------------------------------------------------------------\n",
    "## Imports\n",
    "from tensorforce.environments import Environment\n",
    "from tensorforce.agents import Agent\n",
    "\n",
    "\n",
    "\n",
    "###-----------------------------------------------------------------------------\n",
    "### Environment definition\n",
    "class ThermostatEnvironment(Environment):\n",
    "    \"\"\"This class defines a simple thermostat environment.  It is a room with\n",
    "    a heater, and when the heater is on, the room temperature will approach\n",
    "    the max heater temperature (usually 1.0), and when off, the room will\n",
    "    decay to a temperature of 0.0.  The exponential constant that determines\n",
    "    how fast it approaches these temperatures over timesteps is tau.\n",
    "    \"\"\"\n",
    "    def __init__(self):\n",
    "        ## Some initializations.  Will eventually parameterize this in the constructor.\n",
    "        self.tau = 3.0\n",
    "        self.current_temp = np.random.random(size=(1,))\n",
    "\n",
    "        super().__init__()\n",
    "\n",
    "\n",
    "    def states(self):\n",
    "        return dict(type='float', shape=(1,), min_value=0.0, max_value=1.0)\n",
    "\n",
    "\n",
    "    def actions(self):\n",
    "        \"\"\"Action 0 means no heater, temperature approaches 0.0.  Action 1 means\n",
    "        the heater is on and the room temperature approaches 1.0.\n",
    "        \"\"\"\n",
    "        return dict(type='int', num_values=2)\n",
    "\n",
    "\n",
    "    # Optional, should only be defined if environment has a natural maximum\n",
    "    # episode length\n",
    "    def max_episode_timesteps(self):\n",
    "        return super().max_episode_timesteps()\n",
    "\n",
    "\n",
    "    # Optional\n",
    "    def close(self):\n",
    "        super().close()\n",
    "\n",
    "\n",
    "    def reset(self):\n",
    "        \"\"\"Reset state.\n",
    "        \"\"\"\n",
    "        # state = np.random.random(size=(1,))\n",
    "        self.timestep = 0\n",
    "        self.current_temp = np.random.random(size=(1,))\n",
    "        return self.current_temp\n",
    "\n",
    "\n",
    "    def response(self, action):\n",
    "        \"\"\"Respond to an action.  When the action is 1, the temperature\n",
    "        exponentially decays approaches 1.0.  When the action is 0,\n",
    "        the current temperature decays towards 0.0.\n",
    "        \"\"\"\n",
    "        return action + (self.current_temp - action) * math.exp(-1.0 / self.tau)\n",
    "\n",
    "\n",
    "    def reward_compute(self):\n",
    "        \"\"\" The reward here is 0 if the current temp is between 0.4 and 0.6,\n",
    "        else it is distance the temp is away from the 0.4 or 0.6 boundary.\n",
    "        \n",
    "        Return the value within the numpy array, not the numpy array.\n",
    "        \"\"\"\n",
    "        delta = abs(self.current_temp - 0.5)\n",
    "        if delta < 0.1:\n",
    "            return 0.0\n",
    "        else:\n",
    "            return -delta[0] + 0.1\n",
    "\n",
    "\n",
    "    def execute(self, actions):\n",
    "        ## Check the action is either 0 or 1 -- heater on or off.\n",
    "        assert actions == 0 or actions == 1\n",
    "\n",
    "        ## Increment timestamp\n",
    "        self.timestep += 1\n",
    "        \n",
    "        ## Update the current_temp\n",
    "        self.current_temp = self.response(actions)\n",
    "        \n",
    "        ## Compute the reward\n",
    "        reward = self.reward_compute()\n",
    "\n",
    "        ## The only way to go terminal is to exceed max_episode_timestamp.\n",
    "        ## terminal == False means episode is not done\n",
    "        ## terminal == True means it is done.\n",
    "        terminal = False\n",
    "        \n",
    "        return self.current_temp, terminal, reward\n",
    "\n",
    "###-----------------------------------------------------------------------------\n",
    "### Create the environment\n",
    "###   - Tell it the environment class\n",
    "###   - Set the max timestamps that can happen per episode\n",
    "environment = environment = Environment.create(\n",
    "    environment=ThermostatEnvironment,\n",
    "    max_episode_timesteps=100)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Agent setup\n",
    "\n",
    "Here we configure a type of agent to learn against this environment.  There are many agent configurations to choose from, which we will not cover here.  We will not discuss what type of agent to choose here -- we will just take a basic agent to train."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "agent = Agent.create(\n",
    "    agent='tensorforce', environment=environment, update=64,\n",
    "    optimizer=dict(optimizer='adam', learning_rate=1e-3),\n",
    "    objective='policy_gradient', reward_estimation=dict(horizon=1)\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Check: Untrained Agent Performance\n",
    "\n",
    "Let's see how the untrained agent performs on the environment.  The red horizontal lines are the target bands for the temperature.\n",
    "\n",
    "The agent doesn't take actions to try and get the temperature within the bands.  It either initializes a policy to the heater always off or always on."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "### Initialize\n",
    "environment.reset()\n",
    "\n",
    "## Creation of the environment via Environment.create() creates\n",
    "## a wrapper class around the original Environment defined here.\n",
    "## That wrapper mainly keeps track of the number of timesteps.\n",
    "## In order to alter the attributes of your instance of the original\n",
    "## class, like to set the initial temp to a custom value, like here,\n",
    "## you need to access the `environment` member of this wrapped class.\n",
    "## That is why you see the way to set the current_temp like below.\n",
    "environment.current_temp = np.array([0.5])\n",
    "states = environment.current_temp\n",
    "\n",
    "internals = agent.initial_internals()\n",
    "terminal = False\n",
    "\n",
    "### Run an episode\n",
    "temp = [environment.current_temp[0]]\n",
    "while not terminal:\n",
    "    actions, internals = agent.act(states=states, internals=internals, independent=True)\n",
    "    states, terminal, reward = environment.execute(actions=actions)\n",
    "    temp += [states[0]]\n",
    "    \n",
    "### Plot the run\n",
    "plt.figure(figsize=(12, 4))\n",
    "ax=plt.subplot()\n",
    "ax.set_ylim([0.0, 1.0])\n",
    "plt.plot(range(len(temp)), temp)\n",
    "plt.hlines(y=0.4, xmin=0, xmax=99, color='r')\n",
    "plt.hlines(y=0.6, xmin=0, xmax=99, color='r')\n",
    "plt.xlabel('Timestep')\n",
    "plt.ylabel('Temperature')\n",
    "plt.title('Temperature vs. Timestep')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Train the agent\n",
    "\n",
    "Here we train the agent against episodes of interacting with the environment."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Train for 200 episodes\n",
    "for _ in range(200):\n",
    "    states = environment.reset()\n",
    "    terminal = False\n",
    "    while not terminal:\n",
    "        actions = agent.act(states=states)\n",
    "        states, terminal, reward = environment.execute(actions=actions)\n",
    "        agent.observe(terminal=terminal, reward=reward)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Check: Trained Agent Performance\n",
    "\n",
    "You can plainly see that this is toggling the heater on/off to keep the temperature within the target band!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "### Initialize\n",
    "environment.reset()\n",
    "\n",
    "## Creation of the environment via Environment.create() creates\n",
    "## a wrapper class around the original Environment defined here.\n",
    "## That wrapper mainly keeps track of the number of timesteps.\n",
    "## In order to alter the attributes of your instance of the original\n",
    "## class, like to set the initial temp to a custom value, like here,\n",
    "## you need to access the `environment` member of this wrapped class.\n",
    "## That is why you see the way to set the current_temp like below.\n",
    "environment.current_temp = np.array([1.0])\n",
    "states = environment.current_temp\n",
    "\n",
    "internals = agent.initial_internals()\n",
    "terminal = False\n",
    "\n",
    "### Run an episode\n",
    "temp = [environment.current_temp[0]]\n",
    "while not terminal:\n",
    "    actions, internals = agent.act(states=states, internals=internals, independent=True)\n",
    "    states, terminal, reward = environment.execute(actions=actions)\n",
    "    temp += [states[0]]\n",
    "\n",
    "### Plot the run\n",
    "plt.figure(figsize=(12, 4))\n",
    "ax=plt.subplot()\n",
    "ax.set_ylim([0.0, 1.0])\n",
    "plt.plot(range(len(temp)), temp)\n",
    "plt.hlines(y=0.4, xmin=0, xmax=99, color='r')\n",
    "plt.hlines(y=0.6, xmin=0, xmax=99, color='r')\n",
    "plt.xlabel('Timestep')\n",
    "plt.ylabel('Temperature')\n",
    "plt.title('Temperature vs. Timestep')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
